package 面向对象;
/*
 适配器模式
  将一个类的接口转化为客户需要的另一个接口，
  使原本由于接口不兼容不能在一起工作的那些类可以一起工作
*/
public class 适配器设计模式
{
	public static void main(String[] args){
		PowerA a =new PowerAImpl();
		work(a);
		PowerB b=new PowerBImpl();
		//work(b);//不改变work()方法，怎样传入PowerB对象呢，就需要适配器中转
		Adapter ada=new Adapter(b);
		work(ada);
	}
	public static void work(PowerA a){
		System.out.println("准备连接.......");
		a.insert();
		System.out.println("开始工作.......");
	}
}

//适配器 
//实现的是参数需要的对象如PowerA，想传入的其他对象作为适配器类的属性如PowerB
class Adapter implements PowerA{//work()方法参数需要PowerA，作为适配器实现的类
	private PowerB b;//想把PowerB传入work()方法，作为适配器的属性
	public Adapter(PowerB b){//适配器构造方法传入PowerB对象
		this.b=b;
	}
	public void insert(){//在类PowerA的抽象方法里执行PowerB的抽象方法
		b.connet();
	}
}
//适配器另一种用法
interface Fun{
	void work();
	void song();
	void play();
	void run();
}
//class User implements Fun{
//	//必须实现Fun接口所有方法，
//	//如何只实现部分需要的方法呢，可以用abstract 类适配器中转一下
//}
abstract class AdapterAbs{
	public void work(){}
	public void song(){}
	public void play(){}
	public void run(){}
}
class User extends AdapterAbs
{

	@Override
	public void play()
	{
		// TODO: Implement this method
		super.play();
	}
	//只需要实现需要的方法就可以了，不需要的可以不实现
	
}



interface PowerA{
	public void insert();
}
interface PowerB{
	public void connet();
}

class PowerAImpl implements PowerA
{

	@Override
	public void insert()
	{
		System.out.println("电源A连接成功......");
	}

	
}

class PowerBImpl implements PowerB
{

	@Override
	public void connet()
	{
		System.out.println("电源B连接成功.....");
	}

	
}
